from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtCore import Qt
import sys

# Pyqt5 Python37
# 20210506
# 滑动与计数器控件用法
# 使用滑动条控制label中字的大小


class QSample(QWidget):

    def __init__(self):
        super(QSample, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('QSample')
        self.resize(400, 300)

        self.label = QLabel('Text Here')
        self.label.setAlignment(Qt.AlignCenter)

        # 定义滑动条
        self.slider = QSlider(Qt.Horizontal)
        # 设定滑动条参数
        self.slider.setMinimum(12)  # 最大值
        self.slider.setMaximum(36)  # 最小值
        self.slider.setSingleStep(3)  # 滑动步长
        self.slider.setValue(22)  # or the minimal one（默认取最小值）
        self.slider.setTickPosition(QSlider.TicksBelow)  # 刻度在下方显示，有多种定义，详细检索
        self.slider.setTickInterval(6)  # or 10（滑动条刻度间隔，默认为10）

        self.slider.valueChanged.connect(
            lambda: self.showValue(self.label, self.slider))

        # 定义计数器控件
        self.spinbox = QSpinBox()
        self.spinbox.setRange(12, 36)
        self.spinbox.valueChanged.connect(
            lambda: self.showValue(self.label, self.spinbox))

        # 定义布局
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.slider)
        layout.addWidget(self.spinbox)

        self.setLayout(layout)

    # 返回滑动条当前位置
    def showValue(self, label, changer):
        size = changer.value()
        label.setFont(QFont('Arial', size)) # 用值改变字的大小
        print(changer.value())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QSample()
    main.show()
    sys.exit(app.exec_())